package someTestExcemple.huaweiOd.doublepointer;
import java.util.*;
//华为OD机试 - 磁盘容量排序 - 双指针（Java 2025 A卷 100分）
//https://blog.csdn.net/guorui_java/article/details/131136447
public class SortByDiskCapacity {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //磁盘个数
        int n = Integer.parseInt(sc.nextLine());
        String[] disks = new String[n]; //输入的磁盘
        int[][] capacity = new int[n][2];  ////磁盘容量 [0]为磁盘数组索引，[1]为换算成M的容量大小值
        for (int i = 0; i < n; i++) {
            String line = sc.nextLine();
            disks[i] = line;
        }
        sc.close();
        //计算磁盘容量
        for (int i = 0; i < n; i++) {
            String line = disks[i];
            capacity[i][0] = i;
            int strLen = line.length();
            //设置磁盘大小
            int size = 0;
            //计算磁盘容量大小
            //int indexG = line.indexOf('G'); //没找到返回-1


            int subIndex = 0;
            //获取容量
            for (int j = 0; j < strLen; j++) {
                //表示确实找到容量单位
                    if (line.charAt(j) == 'M') {
                        size += Integer.parseInt(line.substring(subIndex, j));
                        subIndex = j + 1; //todo 这一步十分重要 -重新获取截取容量的头索引 而且一定要写成if else if
                    } else if (line.charAt(j) == 'G') {
                        size += Integer.parseInt(line.substring(subIndex, j)) * 1024;
                        subIndex = j + 1;
                    } else if (line.charAt(j) == 'T') {
                        size += Integer.parseInt(line.substring(subIndex,j)) * 1024 * 1024;
                        subIndex = j+ 1;
                    }

            }
            //设置磁盘容量 --Lambda表达式定义了自定义的比较器逻辑
            capacity[i][1] = size;
        }
        //todo 这种写法一定要熟悉
        //定义排序规则，按照磁盘容量升序，如果容量一样，按照磁盘序号升序
        Arrays.sort(capacity, (o1, o2) -> {
            //容量相同，按照磁盘序号排序
            if (o1[1] == o2[1]) {
                return o1[0] - o2[0];
            } else {
                return o1[1] - o2[1];
            }
        });

        //下面写法和上面一个意思 二维数组可以看出一维数组构成的数组
//        Arrays.sort(capacity,new Comparator<int[]>() {
//            @Override
//            public int compare(int[] o1, int[] o2) {
//                if(o1[1]==o2[1]){
//                    return o1[0]-o2[0];
//                }else{
//                    return o1[1]-o2[1];
//                }
//            }
//        });
        //System.out.println("capacity==>" + Arrays.deepToString(capacity));
        for(int i=0;i<n;i++) {
            System.out.println(disks[capacity[i][0]]);
        }

    }
}
//例如给定5块盘的容量，1T，20M，3G，10G6T，3M12G9M排序后的结果为20M，3G，3M12G9M，1T，10G6T。
